package com.example.controller;

import com.example.pojo.Result;
import com.example.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
public class UploadController {

    @Autowired
    private AliOSSUtils aliOSSUtils;

    //upload.html仅为测试页面，存在与否并无关系，可用postman进行代替(只是样例)
    //文件上传功能为单独的功能模块，前端仅点击上传文件即可通过端口"/upload"将文件上传至指定的存储位置，无需将所以内容填满也可存储
    //以下代码本地存储中的username和age存不存在不影响，仅有MultipartFile image即可
    //以下代码阿里云OSS存储文件，将文件存储在阿里云OSS中，并将存储文件的信息url返回给前端页面，前端再对响应的信息进行提取将文件的url传给指定的数据库
    //因此上传的文件可以存入数据库也可以不存入数据库，主要自己的操作

    //在阿里云对象存心OSS中的权限控制中关闭阻止公共访问并将读写权限改为公共读
    //返回给前端的url为公共读的url即未加密，私有的url为加密url并不是返回给前端页面的url，所以需要修改权限

    //本地存储文件
//    @PostMapping("/upload")
//    public Result upload(String username, Integer age, MultipartFile image) throws Exception {
//        log.info("文件上传: {}, {}, {}", username, age, image);
//
//        //获取原始文件名
//        String originalFilename = image.getOriginalFilename();
//
//        //构造唯一的文件名(不能重复) - uuid(通用唯一识别码)
//        int index = originalFilename.lastIndexOf(".");
//        String substring = originalFilename.substring(index);
//        String newFileName = UUID.randomUUID().toString() + substring;
//        log.info("新的文件名: {}", newFileName);
//
//        //将文件存储在服务器的磁盘目录中 D:\IdeaProjects\tlias-web-management-images
//        image.transferTo(new File("D:\\IdeaProjects\\tlias-web-management-images\\" + newFileName));
//
//        return Result.success();
//    }

    //阿里云OSS存储文件
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        log.info("文件上传, 文件名: {}", image.getOriginalFilename());

        //调用阿里云OSS工具类进行文件上传
        String url = aliOSSUtils.upload(image);//调用阿里云OSS工具类, 将上传上来的文件存入阿里云
        log.info("文件上传完成, 文件访问的url: {}", url);

        return Result.success(url);//将图片上传完成后的url返回, 用于浏览器回显展示
    }

}
